<?php
/*
*  Module written by Herman Kuiper <herman@ozuzo.net>
*
*  License Information:
*
*	Spreadsheet_Excel_Writer:  A library for generating Excel Spreadsheets
*	Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
*	This library is free software; you can redistribute it and/or
*	modify it under the terms of the GNU Lesser General Public
*	License as published by the Free Software Foundation; either
*	version 2.1 of the License, or (at your option) any later version.
*
*	This library is distributed in the hope that it will be useful,
*	but WITHOUT ANY WARRANTY; without even the implied warranty of
*	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*	Lesser General Public License for more details.
*
*	You should have received a copy of the GNU Lesser General Public
*	License along with this library; if not, write to the Free Software
*	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

//require_once('PEAR.php');

// Possible operator types

/*
FIXME: change prefixes
*/
define("OP_BETWEEN",	0x00);
define("OP_NOTBETWEEN", 0x01);
define("OP_EQUAL",	  0x02);
define("OP_NOTEQUAL",   0x03);
define("OP_GT",		 0x04);
define("OP_LT",		 0x05);
define("OP_GTE",		0x06);
define("OP_LTE",		0x07);

/**
* Baseclass for generating Excel DV records (validations)
*
* @author   Herman Kuiper
* @category FileFormats
* @package  Spreadsheet_Excel_Writer
*/
class Spreadsheet_Excel_Writer_Validator
{
   var $_type;
   var $_style;
   var $_fixedList;
   var $_blank;
   var $_incell;
   var $_showprompt;
   var $_showerror;
   var $_title_prompt;
   var $_descr_prompt;
   var $_title_error;
   var $_descr_error;
   var $_operator;
   var $_formula1;
   var $_formula2;
	/**
	* The parser from the workbook. Used to parse validation formulas also
	* @var Spreadsheet_Excel_Writer_Parser
	*/
	var $_parser;

	function Spreadsheet_Excel_Writer_Validator(&$parser)
	{
		$this->_parser	   = $parser;
		$this->_type		 = 0x01; // FIXME: add method for setting datatype
		$this->_style		= 0x00;
		$this->_fixedList	= false;
		$this->_blank		= false;
		$this->_incell	   = false;
		$this->_showprompt   = false;
		$this->_showerror	= true;
		$this->_title_prompt = "\x00";
		$this->_descr_prompt = "\x00";
		$this->_title_error  = "\x00";
		$this->_descr_error  = "\x00";
		$this->_operator	 = 0x00; // default is equal
		$this->_formula1	= '';
		$this->_formula2	= '';
	}

   function setPrompt($promptTitle = "\x00", $promptDescription = "\x00", $showPrompt = true)
   {
	  $this->_showprompt = $showPrompt;
	  $this->_title_prompt = $promptTitle;
	  $this->_descr_prompt = $promptDescription;
   }

   function setError($errorTitle = "\x00", $errorDescription = "\x00", $showError = true)
   {
	  $this->_showerror = $showError;
	  $this->_title_error = $errorTitle;
	  $this->_descr_error = $errorDescription;
   }

   function allowBlank()
   {
	  $this->_blank = true;
   }

   function onInvalidStop()
   {
	  $this->_style = 0x00;
   }

	function onInvalidWarn()
	{
		$this->_style = 0x01;
	}

	function onInvalidInfo()
	{
		$this->_style = 0x02;
	}

	function setFormula1($formula)
	{
		// Parse the formula using the parser in Parser.php
		$error = $this->_parser->parse($formula);
		if (PEAR::isError($error)) {
			return $this->_formula1;
		}

		$this->_formula1 = $this->_parser->toReversePolish();
		if (PEAR::isError($this->_formula1)) {
			return $this->_formula1;
		}
		return true;
	}

	function setFormula2($formula)
	{
		// Parse the formula using the parser in Parser.php
		$error = $this->_parser->parse($formula);
		if (PEAR::isError($error)) {
			return $this->_formula2;
		}

		$this->_formula2 = $this->_parser->toReversePolish();
		if (PEAR::isError($this->_formula2)) {
			return $this->_formula2;
		}
		return true;
	}

	function _getOptions()
	{
		$options = $this->_type;
		$options |= $this->_style << 3;
		if ($this->_fixedList) {
			$options |= 0x80;
		}
		if ($this->_blank) {
			$options |= 0x100;
		}
		if (!$this->_incell) {
			$options |= 0x200;
		}
		if ($this->_showprompt) {
			$options |= 0x40000;
		}
		if ($this->_showerror) {
			$options |= 0x80000;
		}
	  $options |= $this->_operator << 20;

	  return $options;
   }

   function _getData()
   {
	  $title_prompt_len = strlen($this->_title_prompt);
	  $descr_prompt_len = strlen($this->_descr_prompt);
	  $title_error_len = strlen($this->_title_error);
	  $descr_error_len = strlen($this->_descr_error);

	  $formula1_size = strlen($this->_formula1);
	  $formula2_size = strlen($this->_formula2);

	  $data  = pack("V", $this->_getOptions());
	  $data .= pack("vC", $title_prompt_len, 0x00) . $this->_title_prompt;
	  $data .= pack("vC", $title_error_len, 0x00) . $this->_title_error;
	  $data .= pack("vC", $descr_prompt_len, 0x00) . $this->_descr_prompt;
	  $data .= pack("vC", $descr_error_len, 0x00) . $this->_descr_error;

	  $data .= pack("vv", $formula1_size, 0x0000) . $this->_formula1;
	  $data .= pack("vv", $formula2_size, 0x0000) . $this->_formula2;

	  return $data;
   }
}

/*class Spreadsheet_Excel_Writer_Validation_List extends Spreadsheet_Excel_Writer_Validation
{
   function Spreadsheet_Excel_Writer_Validation_list()
   {
	  parent::Spreadsheet_Excel_Writer_Validation();
	  $this->_type = 0x03;
   }

   function setList($source, $incell = true)
   {
	  $this->_incell = $incell;
	  $this->_fixedList = true;

	  $source = implode("\x00", $source);
	  $this->_formula1 = pack("CCC", 0x17, strlen($source), 0x0c) . $source;
   }

   function setRow($row, $col1, $col2, $incell = true)
   {
	  $this->_incell = $incell;
	  //$this->_formula1 = ...;
   }

   function setCol($col, $row1, $row2, $incell = true)
   {
	  $this->_incell = $incell;
	  //$this->_formula1 = ...;
   }
}*/

?>
